package validation

type CreateCI struct {
	ProjectId          int    `json:"project_id" form:"project_id" binding:"required"`             // 项目ID (必传)
	Name               string `json:"name" form:"name" binding:"required"`                         // 构建计划名称 (必传)
	ScmType            string `json:"scm_type" form:"scm_type" binding:"required,ScmType"`         // 仓库类型 (必传)
	RepositoryUrl      string `json:"repository_url" form:"repository_url" binding:"required"`     // 仓库链接 (必传)
	RepositoryUsername string `json:"repository_username" form:"repository_username"`              // 仓库用户名 (可选)
	RepositoryToken    string `json:"repository_token" form:"repository_token" binding:"required"` // 仓库访问令牌 (必传)
	Jenkinsfile        string `json:"jenkinsfile" form:"jenkinsfile"`                              // 流水线Jenkinsfile
	JenkinsfileType    int    `json:"jenkinsfile_type" form:"jenkinsfile_type"`                    // 0:使用静态Jenkinsfile 1:使用仓库Jenkinsfile
	Branch             string `json:"branch" form:"branch"`                                        // 分支

	// 模版
	TemplateID int `json:"template_id" form:"template_id"` // 模版ID

	// 第三方仓库相关参数
	Repository      string `json:"repository" form:"repository"`             // 仓库主目录
	BaseURL         string `json:"base_url" form:"base_url"`                 // 自建仓库的baseURL
	RepositoryOwner string `json:"repository_owner" form:"repository_owner"` // 仓库所属
	RepositoryPath  string `json:"repository_path" form:"repository_path"`   // 项目路径

	// docker 制品相关参数
	DockerRepoID   int    `json:"docker_repo_id" form:"docker_repo_id"`   // 制品库ID
	ImageName      string `json:"image_name" form:"image_name"`           // 镜像名称
	DockerfilePath string `json:"dockerfile_path" form:"dockerfile_path"` // dockerfile 位置
	ImageVersion   string `json:"image_version" form:"image_version"`     // 镜像版本

	// 部署相关
	//SSHAddr string `json:"ssh_addr" form:"ssh_addr"`										// 制品库ID
	//SSHPort string `json:"ssh_port" form:"ssh_port"`												// 镜像名称
	//SSHUserName string `json:"dockerfile_path" form:"dockerfile_path"`								// dockerfile 位置
	//SSH string `json:"image_version" form:"image_version"`										// 镜像版本
}

type UpdateCI struct {
	CID                int    `json:"c_id" form:"c_id" binding:"required"`                         // 计划ID (必传)
	ScmType            string `json:"scm_type" form:"scm_type" binding:"required,ScmType"`         // 仓库类型 (必传)
	RepositoryUrl      string `json:"repository_url" form:"repository_url" binding:"required"`     // 仓库链接 (必传)
	RepositoryUsername string `json:"repository_username" form:"repository_username"`              // 仓库用户名 (可选)
	RepositoryToken    string `json:"repository_token" form:"repository_token" binding:"required"` // 仓库访问令牌 (必传)
	//Jenkinsfile string `json:"jenkinsfile" form:"jenkinsfile"`											 // 流水线Jenkinsfile
	JenkinsfileType int    `json:"jenkinsfile_type" form:"jenkinsfile_type"` // 0:使用静态Jenkinsfile 1:使用仓库Jenkinsfile
	Branch          string `json:"branch" form:"branch"`                     // 分支
	// 第三方仓库相关参数
	Repository      string `json:"repository" form:"repository"`             // 仓库主目录
	RepositoryOwner string `json:"repository_owner" form:"repository_owner"` // 仓库所属
	RepositoryPath  string `json:"repository_path" form:"repository_path"`   // 项目路径
}

type UpdateCiName struct {
	CID  int    `json:"c_id" form:"c_id" binding:"required"` // 计划ID (必传)
	Name string `json:"name" form:"name"`                    // 流水线Jenkinsfile
}

type UpdateJksfile struct {
	CID         int    `json:"c_id" form:"c_id" binding:"required"` // 计划ID (必传)
	Jenkinsfile string `json:"jenkinsfile" form:"jenkinsfile"`      // 流水线Jenkinsfile
}

type GetCI struct {
	CID int `json:"c_id" form:"c_id" binding:"required"` // 构建计划ID (必传)
}

type DeleteCI struct {
	ProjectID int `json:"project_id" form:"project_id" binding:"required"` // 项目ID (必传)
	CID       int `json:"c_id" form:"c_id" binding:"required"`             // 构建计划ID (必传)
}

type GetProjectCI struct {
	ProjectId  int    `json:"project_id" form:"project_id" binding:"required"` // 项目ID (必传)
	SearchWord string `json:"search_word" form:"search_word"`
	Page       Page
}

type GetCiEnvs struct {
	CID int `json:"c_id" form:"c_id" binding:"required"` // 构建计划ID (必传)
}

type GetCiEnv struct {
	EnvID int `json:"env_id" form:"env_id" binding:"required"` // 环境变量ID (必传)
}

type CreateCIEnv struct {
	CID            int    `json:"c_id" form:"c_id" binding:"required"`       // 构建计划ID (必传)
	Name           string `json:"name" form:"name" binding:"required"`       // 变量名 (必传)
	Kind           int    `json:"kind" form:"kind" binding:"required"`       // 类别 (必传 1:字符串 2:单选 3:多选)
	Default        string `json:"default" form:"default" binding:"required"` // 默认值 (必传)
	AlternateValue string `json:"alternate_value" form:"alternate_value"`    // 可选项 (必传，用逗号隔开)
	IsSecret       int    `json:"is_secret" form:"is_secret"`                // 保密 (可选，0:非保密 1:保密, 默认0)
	Describe       string `json:"describe" form:"describe"`                  //	说明 (可选)
}

type UpdateCIEnv struct {
	EnvID          int    `json:"env_id" form:"env_id" binding:"required"`   // 环境变量ID (必传)
	Default        string `json:"default" form:"default" binding:"required"` // 默认值 (必传)
	AlternateValue string `json:"alternate_value" form:"alternate_value"`    // 可选项 (必传，用逗号隔开)
	IsSecret       int    `json:"is_secret" form:"is_secret"`                // 保密 (可选，0:非保密 1:保密, 默认0)
	Describe       string `json:"describe" form:"describe"`                  //	说明 (可选)
}

type DeleteCIEnv struct {
	EnvID int `json:"env_id" form:"env_id" binding:"required"` // 环境变量ID (必传)
}

type ToJson struct {
	Jenkinsfile string `json:"jenkinsfile" form:"jenkinsfile" binding:"required"` // jenkinsfile 的字符串格式
}

type ToJenkinsFile struct {
	JenkinsfileJson string `json:"json" form:"json" binding:"required"` // jenkinsfile 的 json 格式
}

type GetDiscarder struct {
	CID int `json:"c_id" form:"c_id" binding:"required"` // 构建计划ID (必传)
}

type SetDiscarder struct {
	CID  int `json:"c_id" form:"c_id" binding:"required"` // 构建计划ID (必传)
	Days int `json:"days" form:"days" binding:"required"` // 保留构建的天数
	Max  int `json:"max" form:"max" binding:"required"`   // 保留构建的最大个数
}

type SetTiming struct {
	CID    int   `json:"c_id" form:"c_id" binding:"required"`            // 构建计划ID (必传)
	Week   []int `json:"week" form:"week" binding:"required"`            // 星期数组
	Hour   int   `json:"hour" form:"hour" binding:"required,Hour"`       // 小时
	Minute int   `json:"minute" form:"minute" binding:"required,Minute"` // 分钟
}
